#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include "matriz_svdlibc.h"
#include "../utilidades/utilidades.h"

#define MAXLINE 1000
#define CHAR_TITLE '*'
#define TITLE_LENGTH 20
#define TRUEFLAG 't'
#define FALSEFLAG 'f'

//Imprime el nombre del test y su resultado y cambia el valor del
//caracter recibido por parámetro si la prueba dio error.
void print_test(char* name, bool resultado, char* result){

	printf("\t%s: %s\n", name, resultado? "OK" : "ERROR");
	
	if(!resultado) *result=FALSEFLAG;
	
}

//Imprime el encabezado de un menu cuyo título recibe por parámetro.
void print_menu_header(char* title){

	char* character=malloc((1+TITLE_LENGTH)*sizeof(char));

	int i;

	for(i=0;i<TITLE_LENGTH;i++) character[i]=CHAR_TITLE;

	character[i]='\0';
	
	printf("\n%s %s %s\n\n",character,title,character);

	free(character);
	
}

//Imprime el pie de un menu cuyo título recibe por parámetro.
void print_menu_footer(char* title){

	char* spaces=malloc((1+strlen(title))*sizeof(char));

	int i;

	for(i=0;i<strlen(title);i++) spaces[i]=' ';

	spaces[i]='\0';

	print_menu_header(spaces);

	free(spaces);
	
}

//Imprime el resultado de las pruebas con un mensaje característico.
void print_resultado(char* result){
	
	if(*result==TRUEFLAG){
		
		printf("\n**********");
		
		printf("El programa ha pasado todas las pruebas con éxito");
		
		printf("**********\n");
	
	}else if(*result==FALSEFLAG){
		
		printf("\nLas pruebas han encontrado errores en el programa. ");
	
		printf("Verificar su funcionamiento.\n");

	}else printf("\nError en las pruebas.\n");
	
}

void prueba_construccion_matriz(char* result){
	
	char* merged_file = "output-merged-file";
	char* destino = "output-matrix";
	
	FILE* input = fopen(merged_file,"r");
	FILE* output = fopen(destino,"w");
	
	construir_matriz_svdlibc(input,output,1,2,3);
	
	fclose(input);
	fclose(output);
	
}

//Ejecución de todas las pruebas.
int main(void){
	
	char* result=(char*)malloc(sizeof(char));
	
	//Si el resultado no se altera, las pruebas salieron bien.
	*result=TRUEFLAG;
	
	prueba_construccion_matriz(result);
	
	print_resultado(result);
	
	free(result);
	
	return 0;

}

